4.7.5. while-silmukka

while-silmukka eroaa for-silmukasta siinä, ettei siinä ole kuin lopetusehto ja komento-osa. Silmukkaa suoritetaan niin kauan, kunnes lopetusehto ei enä&au ml; toteudu. Esimerkissä

set y 0

set x 1

while { $x < 5 } {

incr y $x

incr x 1

}

set x

=> 5

set y

=> 10

on tehty sama asia while-silmukalla kuin edellisen luvun viimeisessä esimerkissä for-silmukalla. while-silmukoita käytettäess ä kannattaa tarkistaa kaksi kertaa, että silmukan lopetusehto varmasti jossain vaiheessa saa arvon epätosi. Jos lopetusehto on aina tosi, on kyseessä ikuinen silmukka, joka saa koneen helposti täysin jumiin. Seuraavassa esimerkiss ä puuttuvat kaarisulkeet saavat aikaan ikuisen silmukan:

set i 1

while $i<=10 {incr i}

=> IKUINEN SILMUKKA !

Esimerkissä on ikuinen silmukka, sillä muuttujan korvautuminen ($i) suoritetaan vain kerran ennen while-komennon suorittamista, jolloin lopetusehdosta tulee lause 1<=10. Lopetusehto on aina tosi ja silmukka hyrräisi mielellään ikuisesti. Virhe korjaantuu laittamalla kaarisulut ehdon ympärille, jolloin muuttujan korvautuminen suoritetaan joka kierroksella. Täll öin silmukka päättyy normaalisti kymmenen kierroksen jälkeen. Seuraavassa esimerkissä on edellisen esimerkin virhe korjattu.

set i 1

while {$i<=10} {incr i}

=> silmukka päättyy normaalisti

 


previous gif next gif
Luk-tutkielma: Tcl/Tk -opiksi ja iloksi.